package com.xyre.client.business.index.presenter;

import android.graphics.Color;
import android.nfc.Tag;
import android.support.v4.app.FragmentTransaction;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;

import com.xyre.client.R;
import com.xyre.client.business.index.bean.VerifyCodeRequest;
import com.xyre.client.business.index.bean.RegistResponse;
import com.xyre.client.business.index.bean.RegistRequest;
import com.xyre.client.business.index.bean.VerifyCodeResponse;
import com.xyre.client.business.index.utils.GuidesHttpHelper;
import com.xyre.client.business.index.view.GuidesFragment;
import com.xyre.client.business.index.view.PhoneRegistFragment;

import java.util.ArrayList;
import java.util.List;

/**
 * ==========================================
 * <p/>
 * 版    权 ： 北京爱接力科技有限公司
 * <p/>
 * 作    者 ： iwen
 * <p/>
 * 版    本 ： 1.0
 * <p/>
 * 创建日期 ： on 2016/3/3  11:27
 * <p/>
 * 描    述 ：
 * <p/>
 * 新手引导页的控制器对象，现实方法：
 * 1. inflaterDefaultFragment 外层 activity 容器加载默认布局fragment
 * 2. onDestroy 清理资源回收数据
 * <p/>
 * <p/>
 * 修订历史 ：
 * v1.0 2016.3.3
 * ==========================================
 */
public class GuidesPresenter implements IGuidesPresenter {

    // 日志标示
    private static final String TAG = "ehome";

    //跟activity对象
    private AppCompatActivity rootActivity;
    // 默认视图fragment对象
    public GuidesFragment guidesFragment;
    // 手机注册视图fragment对象
    public PhoneRegistFragment phoneRegistFragment;
    // 默认图片本地地址集合
    private List<Integer> imageSrcs;


    // 构造方法
    public GuidesPresenter(AppCompatActivity rootActivity) {
        this.rootActivity = rootActivity;
    }


    /**
     * 加载默认视图fragment
     */
    @Override
    public void inflaterDefaultFragment() {

        if (rootActivity == null) {
            return;
        }
        if (guidesFragment == null) {
            guidesFragment = new GuidesFragment();
        }
        FragmentTransaction fragmentTransaction = rootActivity.getSupportFragmentManager().beginTransaction();
        fragmentTransaction.replace(R.id.guides_rootView, guidesFragment);
        fragmentTransaction.commit();
    }

    /**
     * 切换到手机注册fraghment
     */
    @Override
    public void natigiveToPhoneRegistFragment() {

        if (rootActivity == null) {
            return;
        }
        if (phoneRegistFragment == null) {
            phoneRegistFragment = new PhoneRegistFragment();
        }
        FragmentTransaction fragmentTransaction = rootActivity.getSupportFragmentManager().beginTransaction();
        // 启动fragment切换动画
        // 系统提供的jia动画  android.R.anim.fade_in ， android.R.anim.fade_out
        fragmentTransaction.setCustomAnimations(R.anim.slide_in_buttom, R.anim.slide_out_top,
                R.anim.slide_in_buttom, R.anim.slide_out_top);
        fragmentTransaction.hide(guidesFragment);
        fragmentTransaction.add(R.id.guides_rootView, phoneRegistFragment);
        fragmentTransaction.addToBackStack(phoneRegistFragment.getClass().getName());
        fragmentTransaction.commit();
    }


    /**
     * 获取新手引导页默认图片资源路径
     *
     * @return 一组包含新手引导页图片本地地址的 ArrayList<Integer> 的集合
     */
    @Override
    public List<Integer> getImageResoure() {

        if (imageSrcs == null) {
            imageSrcs = new ArrayList<Integer>();
            imageSrcs.add(Color.CYAN);
            imageSrcs.add(Color.GREEN);
            imageSrcs.add(Color.BLUE);
            imageSrcs.add(Color.YELLOW);
            imageSrcs.add(Color.GRAY);
        }
        return imageSrcs;
    }

    /**
     * 获取短信验证码的网络操作
     *
     * @param verifyCodeRequest 电话s数据类型，包含:电话号码(String)
     */
    @Override
    public void getVerifyCode(VerifyCodeRequest verifyCodeRequest) {

        // 开启获得验证码等待状态
        phoneRegistFragment.showloading("", 1);
        GuidesHttpHelper.post2GetVerifycode(verifyCodeRequest, this);
    }

    /**
     * 获取短信验证码失败
     *
     * @param msg 失败信息，一般这里都是网络链接的问题
     */
    @Override
    public void getVerifyCodeError(String msg) {

        // 直接调用手机注册页面的显示获取验证码失败状态的方法
        if (phoneRegistFragment != null) {
            Log.d(TAG, "获取短信验证码返回信息错误，code：" + msg);
            phoneRegistFragment.showStateGetVerifuCodeError(msg);
        }
    }

    // 获取短信验证码成功

    /**
     * 获取短信验证码成功
     * 虽然网络通信成功，但是要判断返回的结果
     * code 0:失败，调用显示获取验证码失败的方法
     * code 1:成功，调用显示获取验证码成功的方法
     *
     * @param verifyCodeResponse
     */
    @Override
    public void getVerifyCodeSuccess(VerifyCodeResponse verifyCodeResponse) {

        if (verifyCodeResponse != null) {

            Log.d(TAG, "获取验证码服务器端返回结果:" + verifyCodeResponse.toString());
            String code = verifyCodeResponse.code;

            // 获取验证码成功
            if ("1".equals(code)) {

                Log.d(TAG, "获取短信验证码：" + verifyCodeResponse.verifyCode);
                if (phoneRegistFragment != null) {
                    phoneRegistFragment.showStateGetVerifuCodeSuccess(verifyCodeResponse.verifyCode);
                }
            }
            // 获取验证码失败
            if ("0".equals(code)) {
                Log.d(TAG, "服务器端返回结果：获取短信验证码失败");
                getVerifyCodeError(verifyCodeResponse.msg);
            }
        }
    }

    /**
     * 手机注册并登录
     *
     * @param RegistRequest 手机注册数据
     */
    @Override
    public void phoneRegist(RegistRequest RegistRequest) {

        // 开启手机注册登录等待状态
        phoneRegistFragment.showloading("正在注册手机号，请稍等......", 2);
        GuidesHttpHelper.post2PhoneAndWeixinRegist(RegistRequest, this);
    }

    /**
     * 手机注册并登录失败
     *
     * @param msg 失败信息
     */
    @Override
    public void phoneRegistError(String msg) {

        Log.d(TAG, "手机注册页面失败，code：" + msg);
        // 直接调用手机注册页面的显示手机注册失败状态的方法
        if (phoneRegistFragment != null) {
            phoneRegistFragment.showStatePhoneRegistError(msg);
        }
    }

    /**
     * 手机注册并登录成功
     *
     * @param registResponse 服务器返回结果
     */
    @Override
    public void phoneRegistSuccess(RegistResponse registResponse) {

        if (registResponse != null) {

            Log.d(TAG, "手机注册服务器端返回结果:" + registResponse.toString());
            String code = registResponse.code;

            // 获取验证码成功
            if ("1".equals(code)) {

                Log.d(TAG, "注册成功，返回信息：" + registResponse.toString());
                if (phoneRegistFragment != null) {
                    phoneRegistFragment.showStatePhoneRegistSuccess(registResponse.userInfo);
                }
            }
            // 获取验证码失败
            if ("0".equals(code)) {
                Log.d(TAG, "服务器端返回结果：手机号注册失败");
                phoneRegistError(registResponse.msg);
            }
        } else {
            Log.d(TAG, "手机注册页面返回结果null");
        }

    }

    /**
     * 微信注册登录
     *
     * @param RegistRequest
     */
    @Override
    public void weixinRegist(RegistRequest RegistRequest) {

        // 显示等待正太
        GuidesHttpHelper.post2PhoneAndWeixinRegist(RegistRequest, this);
    }

    /**
     * 微信注册登录失败
     *
     * @param msg
     */
    @Override
    public void weixinRegistError(String msg) {

        Log.i(TAG, "微信注册失败,失败信息: " + msg);
        // 直接调用手机注册页面的显示手机注册失败状态的方法
        if (guidesFragment != null) {
            guidesFragment.showStateWeixinRegistError(msg);
        }
    }

    /**
     * 微信注册登录成功
     *
     * @param registResponse
     */
    @Override
    public void weixinRegistSuccess(RegistResponse registResponse) {

        if (registResponse != null) {

            Log.d(TAG, "微信注册服务器端返回结果:" + registResponse.toString());
            String code = registResponse.code;

            // 获取验证码成功
            if ("1".equals(code)) {

                Log.d(TAG, "微信注册成功，返回信息：" + registResponse.toString());
                if (guidesFragment != null) {
                    guidesFragment.showStateWeixinRegistSuccess(registResponse.userInfo);
                }
            }
            // 获取验证码失败
            if ("0".equals(code)) {
                Log.d(TAG, "服务器端返回结果：微信号注册失败");
                weixinRegistError(registResponse.msg);
            }
        } else {
            Log.d(TAG, "手机注册页面返回结果null");
        }

    }

    /**
     * 清除全局数据缓存
     */
    @Override
    public void onDestroy() {

        rootActivity = null;
        imageSrcs = null;

        if (phoneRegistFragment != null) {
            phoneRegistFragment.onDestroy();
        }
        phoneRegistFragment = null;

        if (guidesFragment != null) {
            guidesFragment.onDestroy();
        }
        guidesFragment = null;
    }

}
